Address (hex, dec) | Description
|
---|
$0000-$00FF, 0-255 Zero page
|
$0000 0 |
Processor port data direction register. Bits:
Default: $2F, %00101111.
|
$0001Processor port. Bits:
Bits #0-#2: Configuration for memory areas
$A000-$BFFF, $D000-$DFFF and $E000-$FFFF. Values:
%x00: RAM visible in all three areas.
%x01: RAM visible at $A000-$BFFF and
$E000-$FFFF.
%x10: RAM visible at $A000-$BFFF; KERNAL ROM
visible at $E000-$FFFF.
%x11: BASIC ROM visible at $A000-$BFFF; KERNAL ROM
visible at $E000-$FFFF.
%0xx: Character ROM visible at $D000-$DFFF. (Except
for the value %000, see above.)
%1xx: I/O area visible at $D000-$DFFF. (Except for
the value %100, see above.)
Bit #3: Datasette output signal level.
Bit #4: Datasette button status; 0 = One or more of
PLAY, RECORD, F.FWD or REW pressed; 1 = No button is pressed.
Bit #5: Datasette motor control; 0 = On; 1 = Off.
Default: $37, %00110111.
| |
$0002Unused.
| |
Unused.">$0003-$0004 3-4 | Unused.
|
Unused.">$0005-$0006 5-6 | Unused.
|
$0007Byte being search for during various
operations.
Current digit of number being input.
Low byte of first integer operand during AND and OR.
Low byte of integer-format FAC during INT().
| |
$0008Byte being search for during various
operations.
Current byte of BASIC line during tokenization.
High byte of first integer operand during AND and OR.
| |
$0009Current column number during SPC()
and TAB().
| |
$000ALOAD/VERIFY switch. Values:
$00: LOAD.
$01-$FF: VERIFY.
| |
$000BCurrent token during
tokenization.
Length of BASIC line during insertion of line.
AND/OR switch; $00 = AND; $FF = OR.
Number of dimensions during array operations.
| |
$000CSwitch for array operations.
Values:
| |
$000DCurrent expression type. Values:
$00: Numerical.
$FF: String.
| |
$000ECurrent numerical expression type.
Bits:
| |
$000FQuotation mode switch during
tokenization; Bit #6: 0 = Normal mode; 1 = Quotation mode.
Quotation mode switch during LIST; $01 = Normal mode; $FE = Quotation
mode.
Garbage collection indicator during memory allocation for string variable;
$00-$7F = There was no garbage collection yet; $80 = Garbage collection
already took place.
| |
$0010Switch during fetch of variable
name. Values:
| |
$0011GET/INPUT/READ switch. Values:
$00: INPUT.
$40: GET.
$98: READ.
| |
$0012Sign during SIN() and TAN().
Values:
$00: Positive.
$FF: Negative.
| |
Current I/O device number.">$0013 19 | Current I/O device number.
|
$0014-$0015Line number during GOSUB,
GOTO and RUN.
Second line number during LIST.
Memory address during PEEK, POKE, SYS and WAIT.
| |
$0016Pointer to next expression in string
stack. Values: $19; $1C; $1F; $22.
Default: $19.
| |
$0017-$0018Pointer to previous
expression in string stack.
| |
$0019-$0021String stack, temporary
area for processing string expressions (9 bytes, 3 entries).
| |
$0022-$0025Temporary area for various
operations (4 bytes).
| |
$0026-$0029Auxiliary arithmetical
register for division and multiplication (4 bytes).
| |
$002AUnused.
| |
$002B-$002CPointer to beginning of
BASIC area.
Default: $0801, 2049.
| |
$002D-$002EPointer to beginning of
variable area. (End of program plus 1.)
| |
$002F-$0030Pointer to beginning of
array variable area.
| |
$0031-$0032Pointer to end of array
variable area.
| |
$0033-$0034Pointer to beginning of
string variable area. (Grows downwards from end of BASIC area.)
| |
$0035-$0036Pointer to memory allocated
for current string variable.
| |
$0037-$0038Pointer to end of BASIC
area.
Default: $A000, 40960.
| |
$0039-$003ACurrent BASIC line number.
Values:
$0000-$F9FF, 0-63999: Line number.
$FF00-$FFFF: Direct mode, no BASIC program is being
executed.
| |
$003B-$003CCurrent BASIC line number
for CONT.
| |
$003D-$003EPointer to next BASIC
instruction for CONT. Values:
| |
$003F-$0040BASIC line number of
current DATA item for READ.
| |
$0041-$0042Pointer to next DATA item
for READ.
| |
$0043-$0044Pointer to input result
during GET, INPUT and READ.
| |
$0045-$0046Name and type of current
variable. Bits:
$0045 bits #0-#6: First character of variable
name.
$0046 bits #0-#6: Second character of variable name;
$00 = Variable name consists of only one character.
$0045 bit #7 and $0046 bit #7:
| |
$0047-$0048Pointer to value of current
variable or FN function.
| |
$0049-$004APointer to value of current
variable during LET.
Value of second and third parameter during WAIT.
Logical number and device number during OPEN.
$0049, 73: Logical number of CLOSE.
Device number of LOAD, SAVE and VERIFY.
| |
$004B-$004CTemporary area for saving
original pointer to current BASIC instruction during GET, INPUT and
READ.
| |
$004DComparison operator indicator.
Bits:
Bit #1: 1 = ">" (greater than) is present in
expression.
Bit #2: 1 = "=" (equal to) is present in
expression.
Bit #3: 1 = "<" (less than) is present in
expression.
| |
$004E-$004FPointer to current FN
function.
| |
$0050-$0051Pointer to current string
variable during memory allocation.
| |
$0052Unused.
| |
$0053Step size of garbage collection.
Values: $03; $07.
| |
$0054-$0056JMP ABS machine
instruction, jump to current BASIC function.
$0055-$0056, 85-86: Execution address of current BASIC function.
| |
$0057-$005BArithmetic register #3 (5
bytes).
| |
$005C-$0060Arithmetic register #4 (5
bytes).
| |
$0061-$0065FAC, arithmetic register
#1 (5 bytes).
| |
$0066Sign of FAC. Bits:
| |
$0067Number of degrees during polynomial
evaluation.
| |
$0068Temporary area for various
operations.
| |
$0069-$006DARG, arithmetic register
#2 (5 bytes).
| |
$006ESign of ARG. Bits:
| |
$006F-$0070Pointer to first string
expression during string comparison.
| |
$0071-$0072Auxiliary pointer during
array operations.
Temporary area for saving original pointer to current BASIC instruction
during VAL().
Pointer to current item of polynomial table during polynomial
evaluation.
| |
$0073-$008ACHRGET. Machine code
routine to read next byte from BASIC program or direct command (24
bytes).
$0079, 121: CHRGOT. Read current byte from BASIC program or direct
command.
$007A-$007B, 122-123: Pointer to current byte in BASIC program or direct
command.
| |
$008B-$008FPrevious result of
RND().
| |
$0090Value of ST variable, device status
for serial bus and datasette input/output. Serial bus bits:
Bit #0: Transfer direction during which the timeout
occured; 0 = Input; 1 = Output.
Bit #1: 1 = Timeout occurred.
Bit #4: 1 = VERIFY error occurred (only during
VERIFY), the file read from the device did not match that in the
memory.
Bit #6: 1 = End of file has been reached.
Bit #7: 1 = Device is not present.
Datasette bits:
Bit #2: 1 = Block is too short (shorter than 192
bytes).
Bit #3: 1 = Block is too long (longer than 192
bytes).
Bit #4: 1 = Not all bytes read with error during pass
1 could be corrected during pass 2, or a VERIFY error occurred, the file
read from the device did not match that in the memory.
Bit #5: 1 = Checksum error occurred.
Bit #6: 1 = End of file has been reached (only during
reading data files).
| |
$0091Stop key indicator. Values:
| |
$0092Unknown. (Timing constant during
datasette input.)
| |
$0093LOAD/VERIFY switch. Values:
$00: LOAD.
$01-$FF: VERIFY.
| |
$0094Serial bus output cache status.
Bits:
| |
$0095Serial bus output cache, previous
byte to be sent to serial bus.
| |
$0096Unknown. (End of tape indicator
during datasette input/output.)
| |
$0097Temporary area for saving original
value of Y register during input from RS232.
Temporary area for saving original value of X register during input from
datasette.
| |
$0098Number of files currently open.
Values: $00-$0A, 0-10.
| |
Current input device number.">$0099 153 | Current input device number.
|
Current output device number.">$009A 154 | Current output device number.
|
$009BUnknown. (Parity bit during
datasette input/output.)
| |
$009CUnknown. (Byte ready indicator
during datasette input/output.)
| |
$009DSystem error display switch.
Bits:
| |
$009EByte to be put into output buffer
during RS232 and datasette output.
Block header type during datasette input/output.
Length of file name during datasette input/output.
Error counter during LOAD from datasette. Values: $00-$3E, 0-62.
| |
$009FAuxiliary counter for writing file
name into datasette buffer.
Auxiliary counter for comparing requested file name with file name read from
datasette during datasette input.
Error correction counter during LOAD from datasette. Values: $00-$3E,
0-62.
| |
$00A0-$00A2Value of TI variable,
time of day, increased by 1 every 1/60 second (on PAL machines). Values:
$000000-$4F19FF, 0-518399 (on PAL machines).
| |
$00A3EOI switch during serial bus
output. Bits:
Bit counter during datasette output.
| |
$00A4Byte buffer during serial bus
input.
Parity during datasette input/output.
| |
$00A5Bit counter during serial bus
input/output.
Counter for sync mark during datasette output.
| |
$00A6Offset of current byte in datasette
buffer.
| |
$00A7Bit buffer during RS232 input.
| |
$00A8Bit counter during RS232 input.
| |
$00A9Stop bit switch during RS232 input.
Values:
$00: Data bit.
$01-$FF: Stop bit.
| |
$00AAByte buffer during RS232 input.
| |
Parity during RS232 input.">$00AB 171 | Parity during RS232 input.
|
$00AC-$00ADStart address for SAVE to
serial bus.
Pointer to current byte during SAVE to serial bus or datasette.
Pointer to line in screen memory to be scrolled during scrolling the
screen.
| |
$00AE-$00AFLoad address read from
input file and pointer to current byte during LOAD/VERIFY from serial
bus.
End address after LOAD/VERIFY from serial bus or datasette.
End address for SAVE to serial bus or datasette.
Pointer to line in Color RAM to be scrolled during scrolling the screen.
| |
$00B0-$00B1Unknown.
| |
$00B2-$00B3Pointer to datasette
buffer.
Default: $033C, 828.
| |
$00B4Bit counter and stop bit switch
during RS232 output. Bits:
Bit counter during datasette input/output.
| |
$00B5Bit buffer (in bit #2) during RS232
output.
| |
$00B6Byte buffer during RS232
output.
| |
$00B7Length of file name or disk
command; first parameter of LOAD, SAVE and VERIFY or fourth parameter of
OPEN. Values:
| |
$00B8Logical number of current file.
| |
$00B9Secondary address of current
file.
| |
$00BADevice number of current file.
| |
$00BB-$00BCPointer to current file
name or disk command; first parameter of LOAD, SAVE and VERIFY or fourth
parameter of OPEN.
| |
Parity during RS232 output.">$00BD 189 | Parity during RS232 output.
|
$00BEBlock counter during datasette
input/output.
| |
$00BFUnknown.
| |
$00C0Datasette motor switch. Values:
| |
$00C1-$00C2Start address during SAVE
to serial bus, LOAD and VERIFY from datasette and SAVE to datasette.
Pointer to current byte during memory test.
| |
$00C3-$00C4Start address for a
secondary address of 0 for LOAD and VERIFY from serial bus or datasette.
Pointer to ROM table of default vectors during initialization of I/O
vectors.
| |
$00C5Matrix code of key previously
pressed. Values:
| |
$00C6Length of keyboard buffer.
Values:
| |
$00C7Reverse mode switch. Values:
$00: Normal mode.
$12: Reverse mode.
| |
$00C8Length of line minus 1 during
screen input. Values: $27, 39; $4F, 79.
| |
$00C9Cursor row during screen input.
Values: $00-$18, 0-24.
| |
$00CACursor column during screen input.
Values: $00-$27, 0-39.
| |
$00CBMatrix code of key currently being
pressed. Values:
| |
$00CCCursor visibility switch.
Values:
$00: Cursor is on.
$01-$FF: Cursor is off.
| |
$00CDDelay counter for changing cursor
phase. Values:
| |
$00CEScreen code of character under
cursor.
| |
$00CFCursor phase switch. Values:
$00: Cursor off phase, original character
visible.
$01: Cursor on phase, reverse character visible.
| |
$00D0End of line switch during screen
input. Values:
| |
$00D1-$00D2Pointer to current line
in screen memory.
| |
$00D3Current cursor column. Values:
$00-$27, 0-39.
| |
$00D4Quotation mode switch. Values:
$00: Normal mode.
$01: Quotation mode.
| |
$00D5Length of current screen line minus
1. Values: $27, 39; $4F, 79.
| |
$00D6Current cursor row. Values:
$00-$18, 0-24.
| |
$00D7PETSCII code of character during
screen input/output.
Bit buffer during datasette input.
Block checksum during datasette output.
| |
$00D8Number of insertions. Values:
$00: No insertions made, normal mode, control codes
change screen layout or behavior.
$01-$FF: Number of insertions, when inputting this
many character next, those must be turned into control codes, similarly to
quotation mode.
| |
$00D9-$00F1High byte of pointers to
each line in screen memory (25 bytes). Values:
| |
$00F2Temporary area during scrolling the
screen.
| |
$00F3-$00F4Pointer to current line
in Color RAM.
| |
$00F5-$00F6Pointer to current
conversion table during conversion from keyboard matrix codes to PETSCII
codes.
| |
$00F7-$00F8Pointer to RS232 input
buffer. Values:
$0000-$00FF: No buffer defined, a new buffer must be
allocated upon RS232 input.
$0100-$FFFF: Buffer pointer.
| |
$00F9-$00FAPointer to RS232 output
buffer. Values:
$0000-$00FF: No buffer defined, a new buffer must be
allocated upon RS232 output.
$0100-$FFFF: Buffer pointer.
| |
$00FB-$00FEUnused (4 bytes).
| |
$00FF-$010ABuffer for conversion
from floating point to string (12 bytes.)
| |
$0100-$01FF, 256-511 Processor
stack
|
$00FF-$010ABuffer for conversion
from floating point to string (12 bytes.)
| |
$0100-$013DPointers to bytes read
with error during datasette input (62 bytes, 31 entries).
| |
$0100-$01FFProcessor stack. Also
used for storing data related to FOR and GOSUB.
| |
$0200-$02FF, 512-767
|
$0200-$0258Input buffer, storage
area for data read from screen (89 bytes).
| |
$0259-$0262Logical numbers assigned
to files (10 bytes, 10 entries).
| |
$0263-$026CDevice numbers assigned
to files (10 bytes, 10 entries).
| |
$026D-$0276Secondary addresses
assigned to files (10 bytes, 10 entries).
| |
$0277-$0280Keyboard buffer (10
bytes, 10 entries).
| |
$0281-$0282Pointer to beginning of
BASIC area after memory test.
Default: $0800, 2048.
| |
$0283-$0284Pointer to end of BASIC
area after memory test.
Default: $A000, 40960.
| |
$0285Unused. (Serial bus timeout.)
| |
$0286Current color, cursor color.
Values: $00-$0F, 0-15.
| |
$0287Color of character under cursor.
Values: $00-$0F, 0-15.
| |
$0288High byte of pointer to screen
memory for screen input/output.
Default: $04, $0400, 1024.
| |
$0289Maximum length of keyboard buffer.
Values:
| |
$028AKeyboard repeat switch. Bits:
| |
$028BDelay counter during repeat
sequence, for delaying between successive repeats. Values:
| |
$028CRepeat sequence delay counter, for
delaying before first repetition. Values:
$00, 0: Must start repeat sequence.
$01-$10, 1-16: Delay repeat sequence.
| |
$028DShift key indicator. Bits:
Bit #0: 1 = One or more of left Shift, right Shift or
Shift Lock is currently being pressed or locked.
Bit #1: 1 = Commodore is currently being pressed.
Bit #2: 1 = Control is currently being pressed.
| |
$028EPrevious value of shift key
indicator. Bits:
Bit #0: 1 = One or more of left Shift, right Shift or
Shift Lock was pressed or locked at the time of previous check.
Bit #1: 1 = Commodore was pressed at the time of
previous check.
Bit #2: 1 = Control was pressed at the time of
previous check.
| |
$028F-$0290Execution address of
routine that, based on the status of shift keys, sets the pointer at memory
address $00F5-$00F6 to the appropriate conversion table for converting
keyboard matrix codes to PETSCII codes.
Default: $EB48.
| |
$0291Commodore-Shift switch. Bits:
| |
$0292Scroll direction switch during
scrolling the screen. Values:
$00: Insertion of line before current line, current
line and all lines below it must be scrolled 1 line downwards.
$01-$FF: Bottom of screen reached, complete screen
must be scrolled 1 line upwards.
| |
$0293RS232 control register. Bits:
Bits #0-#3: Baud rate, transfer speed. Values:
%0000: User specified.
%0001: 50 bit/s.
%0010: 75 bit/s.
%0011: 110 bit/s.
%0100: 150 bit/s.
%0101: 300 bit/s.
%0110: 600 bit/s.
%0111: 1200 bit/s.
%1000: 2400 bit/s.
%1001: 1800 bit/s.
%1010: 2400 bit/s.
%1011: 3600 bit/s.
%1100: 4800 bit/s.
%1101: 7200 bit/s.
%1110: 9600 bit/s.
%1111: 19200 bit/s.
Bits #5-#6: Byte size, number of data bits per byte;
%00 = 8; %01 = 7, %10 = 6; %11 = 5.
Bit #7: Number of stop bits; 0 = 1 stop bit; 1 = 2
stop bits.
| |
$0294RS232 command register. Bits:
Bit #0: Synchronization type; 0 = 3 lines; 1 = X
lines.
Bit #4: Transmission type; 0 = Duplex; 1 = Half
duplex.
Bits #5-#7: Parity mode. Values:
%xx0: No parity check, bit #7 does not exist.
%001: Odd parity.
%011: Even parity.
%101: No parity check, bit #7 is always 1.
%111: No parity check, bit #7 is always 0.
| |
$0295-$0296Default value of RS232
output timer, based on baud rate. (Must be filled with actual value before
RS232 input/output if baud rate is "user specified" in RS232 control
register, memory address $0293.)
| |
$0297Value of ST variable, device status
for RS232 input/output. Bits:
Bit #0: 1 = Parity error occurred.
Bit #1: 1 = Frame error, a stop bit with the value of
0, occurred.
Bit #2: 1 = Input buffer underflow occurred, too much
data has arrived but it has not been read from the buffer in time.
Bit #3: 1 = Input buffer is empty, nothing to
read.
Bit #4: 0 = Sender is Clear To Send; 1 = Sender is
not ready to send data to receiver.
Bit #6: 0 = Receiver reports Data Set Ready; 1 =
Receiver is not ready to receive data.
Bit #7: 1 = Carrier loss, a stop bit and a data byte
both with the value of 0, detected.
| |
$0298RS232 byte size, number of data
bits per data byte, default value for bit counters.
| |
$0299-$029ADefault value of RS232
input timer, based on baud rate. (Calculated automatically from default
value of RS232 output timer, at memory address $0295-$0296.)
| |
$029BOffset of byte received in RS232
input buffer.
| |
$029COffset of current byte in RS232
input buffer.
| |
$029DOffset of byte to send in RS232
output buffer.
| |
$029EOffset of current byte in RS232
output buffer.
| |
$029F-$02A0Temporary area for saving
pointer to original interrupt service routine during datasette input output.
Values:
$0000-$00FF: No datasette input/output took place yet
or original pointer has been already restored.
$0100-$FFFF: Original pointer, datasette input/output
currently in progress.
| |
$02A1Temporary area for saving original
value of CIA#2 interrupt control register, at memory address $DD0D, during
RS232 input/output.
| |
$02A2Temporary area for saving original
value of CIA#1 timer #1 control register, at memory address $DC0E, during
datasette input/output.
| |
$02A3Temporary area for saving original
value of CIA#1 interrupt control register, at memory address $DC0D, during
datasette input/output.
| |
$02A4Temporary area for saving original
value of CIA#1 timer #1 control register, at memory address $DC0E, during
datasette input/output.
| |
$02A5Number of line currently being
scrolled during scrolling the screen.
| |
$02A6PAL/NTSC switch, for selecting
RS232 baud rate from the proper table. Values:
| |
$02A7-$02FFUnused (89 bytes).
| |
$0300-$03FF, 768-1023
|
$0300-$0301Execution address of warm
reset, displaying optional BASIC error message and entering BASIC idle
loop.
Default: $E38B.
| |
$0302-$0303Execution address of
BASIC idle loop.
Default: $A483.
| |
$0304-$0305Execution address of
BASIC line tokenizater routine.
Default: $A57C.
| |
$0306-$0307Execution address of
BASIC token decoder routine.
Default: $A71A.
| |
$0308-$0309Execution address of
BASIC instruction executor routine.
Default: $A7E4.
| |
$030A-$030BExecution address of
routine reading next item of BASIC expression.
Default: $AE86.
| |
$030CDefault value of register A for
SYS.
Value of register A after SYS.
| |
$030DDefault value of register X for
SYS.
Value of register X after SYS.
| |
$030EDefault value of register Y for
SYS.
Value of register Y after SYS.
| |
$030FDefault value of status register
for SYS.
Value of status register after SYS.
| |
$0310-$0312JMP ABS machine
instruction, jump to USR() function.
$0311-$0312, 785-786: Execution address of USR() function.
| |
$0313Unused.
| |
$0314-$0315Execution address of
interrupt service routine.
Default: $EA31.
| |
$0316-$0317Execution address of BRK
service routine.
Default: $FE66.
| |
$0318-$0319Execution address of
non-maskable interrupt service routine.
Default: $FE47.
| |
$031A-$031BExecution address of
OPEN, routine opening files.
Default: $F34A.
| |
$031C-$031DExecution address of
CLOSE, routine closing files.
Default: $F291.
| |
$031E-$031FExecution address of
CHKIN, routine defining file as default input.
Default: $F20E.
| |
$0320-$0321Execution address of
CHKOUT, routine defining file as default output.
Default: $F250.
| |
$0322-$0323Execution address of
CLRCHN, routine initializating input/output.
Default: $F333.
| |
$0324-$0325Execution address of
CHRIN, data input routine, except for keyboard and RS232 input.
Default: $F157.
| |
$0326-$0327Execution address of
CHROUT, general purpose data output routine.
Default: $F1CA.
| |
$0328-$0329Execution address of
STOP, routine checking the status of Stop key indicator, at memory address
$0091.
Default: $F6ED.
| |
$032A-$032BExecution address of
GETIN, general purpose data input routine.
Default: $F13E.
| |
$032C-$032DExecution address of
CLALL, routine initializing input/output and clearing all file assignment
tables.
Default: $F32F.
| |
Unused.">$032E-$032F 814-815 | Unused.
|
$0330-$0331Execution address of
LOAD, routine loading files.
Default: $F4A5.
| |
$0332-$0333Execution address of
SAVE, routine saving files.
Default: $F5ED.
| |
$0334-$033BUnused (8 bytes).
| |
$033C-$03FBDatasette buffer (192
bytes).
| |
$03FC-$03FFUnused (4 bytes).
| |
$0400-$07FF, 1024-2047 Default screen
memory
|
$0400-$07E7Default area of screen
memory (1000 bytes).
| |
$07E8-$07F7Unused (16 bytes).
| |
$07F8-$07FFDefault area for sprite
pointers (8 bytes).
| |
$0800-$9FFF, 2048-40959 BASIC area
|
$0800Unused. (Must contain a value of 0
so that the BASIC program can be RUN.)
| |
$0801-$9FFFDefault BASIC area
(38911 bytes).
| |
$8000-$9FFFOptional cartridge
ROM (8192 bytes).
$8000-$8001, 32768-32769: Execution address of cold reset.
$8002-$8003, 32770-32771: Execution address of non-maskable interrupt
service routine.
$8004-$8008, 32772-32776: Cartridge signature. If contains the uppercase
PETSCII string "CBM80" ($C3,$C2,$CD,$38,$30) then the routine vectors are
accepted by the KERNAL.
| |
$A000-$BFFF, 40960-49151 BASIC ROM
|
$A000-$BFFFBASIC ROM or RAM area
(8192 bytes); depends on the value of bits #0-#2 of the processor port at
memory address $0001:
| |
$C000-$CFFF, 49152-53247 Upper RAM
area
|
$C000-$CFFFUpper RAM area (4096
bytes).
| |
$D000-$DFFF, 53248-57343 I/O Area
|
$D000-$DFFFI/O Area (memory
mapped chip registers), Character ROM or RAM area (4096 bytes); depends on
the value of bits #0-#2 of the processor port at memory address $0001:
%x00: RAM area.
%0xx: Character ROM. (Except for the value %000, see
above.)
%1xx: I/O Area. (Except for the value %100, see
above.)
| |
$D000-$DFFF, 53248-57343 Character
ROM
|
$D000-$DFFFCharacter ROM, shape
of characters (4096 bytes).
| |
$D000-$D7FFShape of characters
in uppercase/graphics character set (2048 bytes, 256 entries).
| |
$D800-$DFFFShape of characters
in lowercase/uppercase character set (2048 bytes, 256 entries).
| |
$D000-$D3FF, 53248-54271 VIC-II; video
display
|
$D000Sprite #0 X-coordinate (only bits
#0-#7).
| |
$D001Sprite #0 Y-coordinate.
| |
$D002Sprite #1 X-coordinate (only bits
#0-#7).
| |
$D003Sprite #1 Y-coordinate.
| |
$D004Sprite #2 X-coordinate (only bits
#0-#7).
| |
$D005Sprite #2 Y-coordinate.
| |
$D006Sprite #3 X-coordinate (only bits
#0-#7).
| |
$D007Sprite #3 Y-coordinate.
| |
$D008Sprite #4 X-coordinate (only bits
#0-#7).
| |
$D009Sprite #4 Y-coordinate.
| |
$D00ASprite #5 X-coordinate (only bits
#0-#7).
| |
$D00BSprite #5 Y-coordinate.
| |
$D00CSprite #6 X-coordinate (only bits
#0-#7).
| |
$D00DSprite #6 Y-coordinate.
| |
$D00ESprite #7 X-coordinate (only bits
#0-#7).
| |
$D00FSprite #7 Y-coordinate.
| |
$D010Sprite #0-#7 X-coordinates (bit
#8). Bits:
| |
$D011Screen control register #1.
Bits:
Bits #0-#2: Vertical raster scroll.
Bit #3: Screen height; 0 = 24 rows; 1 = 25 rows.
Bit #4: 0 = Screen off, complete screen is covered by
border; 1 = Screen on, normal screen contents are visible.
Bit #5: 0 = Text mode; 1 = Bitmap mode.
Bit #6: 1 = Extended background mode on.
Bit #7: Read: Current raster line (bit #8).
Write: Raster line to generate interrupt at (bit #8).
Default: $1B, %00011011.
| |
$D012Read: Current raster line (bits
#0-#7).
Write: Raster line to generate interrupt at (bits #0-#7).
| |
$D013Light pen X-coordinate (bits
#1-#8).
Read-only.
| |
Light pen Y-coordinate.">$D014 53268 | Light pen Y-coordinate.
|
$D015Sprite enable register. Bits:
| |
$D016Screen control register #2.
Bits:
Bits #0-#2: Horizontal raster scroll.
Bit #3: Screen width; 0 = 38 columns; 1 = 40
columns.
Bit #4: 1 = Multicolor mode on.
Default: $C8, %11001000.
| |
$D017Sprite double height register.
Bits:
| |
$D018Memory setup register. Bits:
Bits #1-#3: In text mode, pointer to character memory
(bits #11-#13), relative to VIC bank, memory address $DD00. Values:
%000, 0: $0000-$07FF, 0-2047.
%001, 1: $0800-$0FFF, 2048-4095.
%010, 2: $1000-$17FF, 4096-6143.
%011, 3: $1800-$1FFF, 6144-8191.
%100, 4: $2000-$27FF, 8192-10239.
%101, 5: $2800-$2FFF, 10240-12287.
%110, 6: $3000-$37FF, 12288-14335.
%111, 7: $3800-$3FFF, 14336-16383.
Values %010 and %011 in VIC bank #0 and #2 select
Character ROM instead.
In bitmap mode, pointer to bitmap memory (bit #13), relative to VIC bank,
memory address $DD00. Values:
%0xx, 0: $0000-$1FFF, 0-8191.
%1xx, 4: $2000-$3FFF, 8192-16383.
Bits #4-#7: Pointer to screen memory (bits #10-#13),
relative to VIC bank, memory address $DD00. Values:
%0000, 0: $0000-$03FF, 0-1023.
%0001, 1: $0400-$07FF, 1024-2047.
%0010, 2: $0800-$0BFF, 2048-3071.
%0011, 3: $0C00-$0FFF, 3072-4095.
%0100, 4: $1000-$13FF, 4096-5119.
%0101, 5: $1400-$17FF, 5120-6143.
%0110, 6: $1800-$1BFF, 6144-7167.
%0111, 7: $1C00-$1FFF, 7168-8191.
%1000, 8: $2000-$23FF, 8192-9215.
%1001, 9: $2400-$27FF, 9216-10239.
%1010, 10: $2800-$2BFF, 10240-11263.
%1011, 11: $2C00-$2FFF, 11264-12287.
%1100, 12: $3000-$33FF, 12288-13311.
%1101, 13: $3400-$37FF, 13312-14335.
%1110, 14: $3800-$3BFF, 14336-15359.
%1111, 15: $3C00-$3FFF, 15360-16383.
| |
$D019Interrupt status register. Read
bits:
Bit #0: 1 = Current raster line is equal to the
raster line to generate interrupt at.
Bit #1: 1 = Sprite-background collision occurred.
Bit #2: 1 = Sprite-sprite collision occurred.
Bit #3: 1 = Light pen signal arrived.
Bit #7: 1 = An event (or more events), that may generate an
interrupt, occurred and it has not been (not all of them have been) acknowledged
yet.
Write bits:
Bit #0: 1 = Acknowledge raster interrupt.
Bit #1: 1 = Acknowledge sprite-background collision
interrupt.
Bit #2: 1 = Acknowledge sprite-sprite collision
interrupt.
Bit #3: 1 = Acknowledge light pen interrupt.
| |
$D01AInterrupt control register.
Bits:
Bit #0: 1 = Raster interrupt enabled.
Bit #1: 1 = Sprite-background collision interrupt
enabled.
Bit #2: 1 = Sprite-sprite collision interrupt
enabled.
Bit #3: 1 = Light pen interrupt enabled.
| |
$D01BSprite priority register.
Bits:
| |
$D01CSprite multicolor mode register.
Bits:
| |
$D01DSprite double width register.
Bits:
| |
$D01ESprite-sprite collision register.
Read bits:
Write: Enable further detection of sprite-sprite
collisions.
| |
$D01FSprite-background collision
register. Read bits:
Write: Enable further detection of sprite-background
collisions.
| |
$D020Border color (only bits
#0-#3).
| |
$D021Background color (only bits
#0-#3).
| |
$D022Extra background color #1 (only
bits #0-#3).
| |
$D023Extra background color #2 (only
bits #0-#3).
| |
$D024Extra background color #3 (only
bits #0-#3).
| |
$D025Sprite extra color #1 (only bits
#0-#3).
| |
$D026Sprite extra color #1 (only bits
#0-#3).
| |
$D027Sprite #0 color (only bits
#0-#3).
| |
$D028Sprite #1 color (only bits
#0-#3).
| |
$D029Sprite #2 color (only bits
#0-#3).
| |
$D02ASprite #3 color (only bits
#0-#3).
| |
$D02BSprite #4 color (only bits
#0-#3).
| |
$D02CSprite #5 color (only bits
#0-#3).
| |
$D02DSprite #6 color (only bits
#0-#3).
| |
$D02ESprite #7 color (only bits
#0-#3).
| |
$D02F-$D03FUnusable (17
bytes).
| |
$D040-$D3FFVIC-II register
images (repeated every $40, 64 bytes).
| |
$D400-$D7FF, 54272-55295 SID; audio
|
$D400-$D401Voice #1
frequency.
Write-only.
| |
$D402-$D403Voice #1 pulse
width.
Write-only.
| |
$D404Voice #1 control register.
Bits:
Bit #0: 0 = Voice off, Release cycle; 1 = Voice on,
Attack-Decay-Sustain cycle.
Bit #1: 1 = Synchronization enabled.
Bit #2: 1 = Ring modulation enabled.
Bit #3: 1 = Disable voice, reset noise generator.
Bit #4: 1 = Triangle waveform enabled.
Bit #5: 1 = Saw waveform enabled.
Bit #6: 1 = Rectangle waveform enabled.
Bit #7: 1 = Noise enabled.
Write-only.
| |
$D405Voice #1 Attack and Decay length.
Bits:
Write-only.
| |
$D406Voice #1 Sustain volume and
Release length. Bits:
Write-only.
| |
$D407-$D408Voice #2
frequency. Write-only.
| |
$D409-$D40AVoice #2 pulse
width. Write-only.
| |
Voice #2 control register.">$D40B 54283 | Voice #2 control register.
|
$D40CVoice #2 Attack and Decay
length.
Write-only.
| |
$D40DVoice #2 Sustain volume and
Release length.
Write-only.
| |
$D40E-$D40FVoice #3
frequency.
Write-only.
| |
$D410-$D411Voice #3 pulse
width.
Write-only.
| |
Voice #3 control register.">$D412 54290 | Voice #3 control register.
|
$D413Voice #3 Attack and Decay
length.
Write-only.
| |
$D414Voice #3 Sustain volume and
Release length.
Write-only.
| |
$D415Filter cut off frequency (bits
#0-#2).
Write-only.
| |
$D416Filter cut off frequency (bits
#3-#10).
Write-only.
| |
$D417Filter control. Bits:
Bit #0: 1 = Voice #1 filtered.
Bit #1: 1 = Voice #2 filtered.
Bit #2: 1 = Voice #3 filtered.
Bit #3: 1 = External voice filtered.
Bits #4-#7: Filter resonance.
Write-only.
| |
$D418Volume and filter modes.
Bits:
Bits #0-#3: Volume.
Bit #4: 1 = Low pass filter enabled.
Bit #5: 1 = Band pass filter enabled.
Bit #6: 1 = High pass filter enabled.
Bit #7: 1 = Voice #3 disabled.
Write-only.
| |
$D419X value of paddle selected at
memory address $DD00. (Updates at every 512 system cycles.)
Read-only.
| |
$D41AY value of paddle selected at
memory address $DD00. (Updates at every 512 system cycles.)
Read-only.
| |
Voice #3 waveform output.">$D41B 54299 | Voice #3 waveform output.
|
Voice #3 ADSR output.">$D41C 54300 | Voice #3 ADSR output.
|
$D41D-$D41FUnusable (3
bytes).
| |
$D420-$D7FFSID register images
(repeated every $20, 32 bytes).
| |
$D800-$DBFF, 55296-56319 Color RAM
|
$D800-$DBE7Color RAM (1000
bytes, only bits #0-#3).
| |
$DBE8-$DBFFUnused (24 bytes,
only bits #0-#3).
| |
$DC00-$DCFF, 56320-56575 CIA#1; inputs
(keyboard, joystick, mouse), datasette, IRQ control
|
$DC00Port A, keyboard matrix columns
and joystick #2. Read bits:
Bit #0: 0 = Port 2 joystick up pressed.
Bit #1: 0 = Port 2 joystick down pressed.
Bit #2: 0 = Port 2 joystick left pressed.
Bit #3: 0 = Port 2 joystick right pressed.
Bit #4: 0 = Port 2 joystick fire pressed.
Write bits:
| |
$DC01Port B, keyboard matrix rows and
joystick #1. Bits:
Bit #x: 0 = A key is currently being pressed in
keyboard matrix row #x, in the column selected at memory address
$DC00.
Bit #0: 0 = Port 1 joystick up pressed.
Bit #1: 0 = Port 1 joystick down pressed.
Bit #2: 0 = Port 1 joystick left pressed.
Bit #3: 0 = Port 1 joystick right pressed.
Bit #4: 0 = Port 1 joystick fire pressed.
| |
$DC02Port A data direction
register.
| |
$DC03Port B data direction
register.
| |
$DC04-$DC05Timer A. Read:
Current timer value.
Write: Set timer start value.
| |
$DC06-$DC07Timer B. Read:
Current timer value.
Write: Set timer start value.
| |
$DC08Time of Day, tenth seconds (in
BCD). Values: $00-$09. Read: Current TOD value.
Write: Set TOD or alarm time.
| |
$DC09Time of Day, seconds (in BCD).
Values: $00-$59. Read: Current TOD value.
Write: Set TOD or alarm time.
| |
$DC0ATime of Day, minutes (in BCD).
Values: $00-$59. Read: Current TOD value.
Write: Set TOD or alarm time.
| |
$DC0BTime of Day, hours (in BCD). Read
bits:
Bits #0-#5: Hours.
Bit #7: 0 = AM; 1 = PM.
Write: Set TOD or alarm time.
| |
$DC0CSerial shift register. (Bits are
read and written upon every positive edge of the CNT pin.)
| |
$DC0DInterrupt control and status
register. Read bits:
Bit #0: 1 = Timer A underflow occurred.
Bit #1: 1 = Timer B underflow occurred.
Bit #2: 1 = TOD is equal to alarm time.
Bit #3: 1 = A complete byte has been received into or
sent from serial shift register.
Bit #4: Signal level on FLAG pin, datasette
input.
Bit #7: An interrupt has been generated.
Write bits:
Bit #0: 1 = Enable interrupts generated by timer A
underflow.
Bit #1: 1 = Enable interrupts generated by timer B
underflow.
Bit #2: 1 = Enable TOD alarm interrupt.
Bit #3: 1 = Enable interrupts generated by a byte
having been received/sent via serial shift register.
Bit #4: 1 = Enable interrupts generated by positive
edge on FLAG pin.
Bit #7: Fill bit; bits #0-#6, that are set to 1, get
their values from this bit; bits #0-#6, that are set to 0, are left
unchanged.
| |
$DC0ETimer A control register.
Bits:
Bit #0: 0 = Stop timer; 1 = Start timer.
Bit #1: 1 = Indicate timer underflow on port B bit
#6.
Bit #2: 0 = Upon timer underflow, invert port B bit
#6; 1 = upon timer underflow, generate a positive edge on port B bit #6
for 1 system cycle.
Bit #3: 0 = Timer restarts upon underflow; 1 = Timer
stops upon underflow.
Bit #4: 1 = Load start value into timer.
Bit #5: 0 = Timer counts system cycles; 1 = Timer
counts positive edges on CNT pin.
Bit #6: Serial shift register direction; 0 = Input,
read; 1 = Output, write.
Bit #7: TOD speed; 0 = 60 Hz; 1 = 50 Hz.
| |
$DC0FTimer B control register.
Bits:
Bit #0: 0 = Stop timer; 1 = Start timer.
Bit #1: 1 = Indicate timer underflow on port B bit
#7.
Bit #2: 0 = Upon timer underflow, invert port B bit
#7; 1 = upon timer underflow, generate a positive edge on port B bit #7
for 1 system cycle.
Bit #3: 0 = Timer restarts upon underflow; 1 = Timer
stops upon underflow.
Bit #4: 1 = Load start value into timer.
Bits #5-#6: %00 = Timer counts system cycles; %01 =
Timer counts positive edges on CNT pin; %10 = Timer counts underflows of
timer A; %11 = Timer counts underflows of timer A occurring along with a
positive edge on CNT pin.
Bit #7: 0 = Writing into TOD registers sets TOD; 1 =
Writing into TOD registers sets alarm time.
| |
$DC10-$DCFFCIA#1 register images
(repeated every $10, 16 bytes).
| |
$DD00-$DDFF, 56576-56831 CIA#2; serial
bus, RS232, NMI control
|
$DD00Port A, serial bus access.
Bits:
Bits #0-#1: VIC bank. Values:
%00, 0: Bank #3, $C000-$FFFF, 49152-65535.
%01, 1: Bank #2, $8000-$BFFF, 32768-49151.
%10, 2: Bank #1, $4000-$7FFF, 16384-32767.
%11, 3: Bank #0, $0000-$3FFF, 0-16383.
Bit #2: RS232 TXD line, output bit.
Bit #3: Serial bus ATN OUT; 0 = High; 1 = Low.
Bit #4: Serial bus CLOCK OUT; 0 = High; 1 = Low.
Bit #5: Serial bus DATA OUT; 0 = High; 1 = Low.
Bit #6: Serial bus CLOCK IN; 0 = Low; 1 = High.
Bit #7: Serial bus DATA IN; 0 = Low; 1 = High.
| |
$DD01Port B, RS232 access. Read
bits:
Bit #0: RS232 RXD line, input bit.
Bit #3: RS232 RI line.
Bit #4: RS232 DCD line.
Bit #5: User port H pin.
Bit #6: RS232 CTS line; 1 = Sender is ready to
send.
Bit #7: RS232 DSR line; 1 = Receiver is ready to
receive.
Write bits:
| |
$DD02Port A data direction
register.
| |
$DD03Port B data direction
register.
| |
$DD04-$DD05Timer A. Read:
Current timer value.
Write: Set timer start value.
| |
$DD06-$DD07Timer B. Read:
Current timer value.
Write: Set timer start value.
| |
$DD08Time of Day, tenth seconds (in
BCD). Values: $00-$09. Read: Current TOD value.
Write: Set TOD or alarm time.
| |
$DD09Time of Day, seconds (in BCD).
Values: $00-$59. Read: Current TOD value.
Write: Set TOD or alarm time.
| |
$DD0ATime of Day, minutes (in BCD).
Values: $00-$59. Read: Current TOD value.
Write: Set TOD or alarm time.
| |
$DD0BTime of Day, hours (in BCD). Read
bits:
Bits #0-#5: Hours.
Bit #7: 0 = AM; 1 = PM.
Write: Set TOD or alarm time.
| |
$DD0CSerial shift register. (Bits are
read and written upon every positive edge of the CNT pin.)
| |
$DD0DInterrupt control and status
register. Read bits:
Bit #0: 1 = Timer A underflow occurred.
Bit #1: 1 = Timer B underflow occurred.
Bit #2: 1 = TOD is equal to alarm time.
Bit #3: 1 = A complete byte has been received into or
sent from serial shift register.
Bit #4: Signal level on FLAG pin.
Bit #7: A non-maskable interrupt has been
generated.
Write bits:
Bit #0: 1 = Enable non-maskable interrupts generated
by timer A underflow.
Bit #1: 1 = Enable non-maskable interrupts generated
by timer B underflow.
Bit #2: 1 = Enable TOD alarm non-maskable
interrupt.
Bit #3: 1 = Enable non-maskable interrupts generated
by a byte having been received/sent via serial shift register.
Bit #4: 1 = Enable non-maskable interrupts generated
by positive edge on FLAG pin.
Bit #7: Fill bit; bits #0-#6, that are set to 1, get
their values from this bit; bits #0-#6, that are set to 0, are left
unchanged.
| |
$DD0ETimer A control register.
Bits:
Bit #0: 0 = Stop timer; 1 = Start timer.
Bit #1: 1 = Indicate timer underflow on port B bit
#6.
Bit #2: 0 = Upon timer underflow, invert port B bit
#6; 1 = upon timer underflow, generate a positive edge on port B bit #6
for 1 system cycle.
Bit #3: 0 = Timer restarts upon underflow; 1 = Timer
stops upon underflow.
Bit #4: 1 = Load start value into timer.
Bit #5: 0 = Timer counts system cycles; 1 = Timer
counts positive edges on CNT pin.
Bit #6: Serial shift register direction; 0 = Input,
read; 1 = Output, write.
Bit #7: TOD speed; 0 = 60 Hz; 1 = 50 Hz.
| |
$DD0FTimer B control register.
Bits:
Bit #0: 0 = Stop timer; 1 = Start timer.
Bit #1: 1 = Indicate timer underflow on port B bit
#7.
Bit #2: 0 = Upon timer underflow, invert port B bit
#7; 1 = upon timer underflow, generate a positive edge on port B bit #7
for 1 system cycle.
Bit #3: 0 = Timer restarts upon underflow; 1 = Timer
stops upon underflow.
Bit #4: 1 = Load start value into timer.
Bits #5-#6: %00 = Timer counts system cycles; %01 =
Timer counts positive edges on CNT pin; %10 = Timer counts underflows of
timer A; %11 = Timer counts underflows of timer A occurring along with a
positive edge on CNT pin.
Bit #7: 0 = Writing into TOD registers sets TOD; 1 =
Writing into TOD registers sets alarm time.
| |
$DD10-$DDFFCIA#2 register images
(repeated every $10, 16 bytes).
| |
$DE00-$DEFF, 56832-57087 I/O Area
#1
|
$DE00-$DEFFI/O Area #1, memory
mapped registers or machine code routines of optional external devices (256
bytes). Layout and contents depend on the actual device.
| |
$DF00-$DFFF, 57088-57343 I/O Area
#2
|
$DF00-$DFFFI/O Area #2, memory
mapped registers or machine code routines of optional external devices (256
bytes). Layout and contents depend on the actual device.
| |
$E000-$FFFF, 57344-65535 KERNAL ROM
|
$E000-$FFFFKERNAL ROM or RAM
area (8192 bytes); depends on the value of bits #0-#2 of the processor port
at memory address $0001:
%x0x: RAM area.
%x1x: KERNAL ROM.
| |
$FFFA-$FFFF, 65530-65535 Hardware
vectors
|
$FFFA-$FFFBExecution address of
non-maskable interrupt service routine.
Default: $FE43.
| |
$FFFC-$FFFDExecution address of
cold reset.
Default: $FCE2.
| |
$FFFE-$FFFFExecution address of
interrupt service routine.
Default: $FF48.
| |